import java.util.Arrays;

/**
 * Created by L.jp
 * Description:
 * User: 86189
 * Date: 2022-07-10
 * Time: 15:52
 */
//演示对数器的使用
    //这里演示选择排序对数器的使用，验证我们写的方法的正确性
public class ContrastCounter {
    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    private static void printArray(int[] arr) {
        for (int j : arr) {
            System.out.print( j + " " );
        }
        System.out.println();
    }
    //自己写的排序方法
    private static void selectionSort(int[] arr){
        int n = arr.length;
        for(int i=0;i<n;i++){
            int minValue = i;
            for(int j=i+1;j<n;j++){
                minValue=arr[j]<arr[minValue] ? j : minValue;
            }
            swap( arr, i, minValue);
        }
    }
    //绝对正确的排序方法
    private static void arrSort(int[] arr){
        Arrays.sort(arr);
    }
    //使用对数器随机生成一个数组,长度是[0~maxLen]之间，每一个值是[0,maxVal]之间
    private  static  int[] generateRandomArr(int maxLen,int maxVal){
        int len=(int)(Math.random() * maxLen);
        int[] arr=new int[len];
        for(int i = 0; i < len; i++){
            arr[i]=(int)(Math.random()*maxVal);
        }
        return arr;
    }
    
    private static int[] copyArr(int[] arr){
        int[] ans=new int[arr.length];
        for(int i = 0; i < arr.length; i++){
            ans[i]=arr[i];
        }
        return ans;
    }
    
    //判断arr是不是排好序的
    private static boolean isSorted(int[] arr){
        if(arr.length<2){
            return true;
        }
       int max=arr[0];
       for(int i = 1; i < arr.length; i++){
           if(max>arr[i]){
               return false;
           }
           max=Math.max( max,arr[i] );
       }
       return true;
    }
    
    public static void main (String[] args) {
        int maxLen=5;
        int maxVal=1000;
        int testTime=10000;
        for(int i=0;i<testTime; i++){
            int[] arr =generateRandomArr( maxLen,maxVal );
            int[] ans=copyArr( arr );
            selectionSort( arr );
//            arrSort( ans );
            if(!isSorted( arr )){
                for(int j=0;j<ans.length;j++){
                    System.out.print(ans[j]+" ");
                }
                System.out.println();
                System.out.println("选择排序错了！");
                //啥也不打印就说明我们自己写的方法是对的
                break;
            }
        }
    }
}
